package 哈希表;

import java.util.HashMap;

public class 四数相加 {
    //对于这题的理解 其实大概就是先统计前两个数组的元素之和 如果在map集合的话就把他出现的次数加一
    //次数加一的意思大概就是该数组有几种的组合方式
    //然后从第三第四个数组那里找到是否有0-temp的元素之和(因为要找负数的 所以相同的是正数)
    //找到相同的话就统计出现的次数 出现的次数就代表的是有几种出现的次数
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4){
        HashMap<Integer, Integer> map = new HashMap<>();
        //统计两个数组中的元素之和，同时统计出现的次数，放入map
        for (int i : nums1) {
            for (int j: nums2) {
                int temp = i+j;
                if (map.containsKey(temp)){
                    //加入map中并且统计出现的次数
                    map.put(temp,map.get(temp)+1);
                }else {
                    //没有出现的直接置一就行了
                map.put(temp,1);
                }

            }
        }
        //统计剩余的两个元素的和，在map中找是否存在相加为0的情况，同时记录次数
        int res = 0;
        for (int i : nums3) {
            for (int j : nums4) {
                int temp = i + j ;
                if (map.containsKey(0-temp)){
                    res += map.get(0-temp);
                }
            }
        }
        return res;
    }
}
